今天我們會先介紹部署檔的構成,再利用 Minikube 在本機建立測試環境,實際感受一下 Pod 如何被創建與異動的。
描述檔是用來描述或更新 Pods 的設定,當我們寫好 .yaml 並且利用命令或介面部署上 kubernetes,等同於實作了一個 Kubernetes objects,藉此創建 ReplicaSet(一群同性質的 Pods) 或更新其狀態。特別提一下會用 Controllers 當標題,是因為官方文件的分類,將各種描述設定所啟用後的 replica,分別歸類在此類別下,筆者自己覺得滿特別的。
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
由於在練習的過程想減少不必要的開支,Minikube 提供我們在本地端建立小型 Kubernetes 的部署,請再依照官方的安裝說明自行安裝。
啟動 Driver 請選擇 docker
> minikube start --driver=docker
?  minikube v1.13.1 on Darwin 10.14
✨  Using the docker driver based on user configuration
?  Starting control plane node minikube in cluster minikube
?  Pulling base image ...
?  Downloading Kubernetes v1.19.2 preload ...
    > preloaded-images-k8s-v6-v1.19.2-docker-overlay2-amd64.tar.lz4: 486.36 MiB
?  Creating docker container (CPUs=2, Memory=1999MB) ...
?  Preparing Kubernetes v1.19.2 on Docker 19.03.8 ...
?  Verifying Kubernetes components...
?  Enabled addons: default-storageclass, storage-provisioner
❗  /usr/local/bin/kubectl is version 1.11.0, which may have incompatibilites with Kubernetes 1.19.2.
?  Want kubectl v1.19.2? Try 'minikube kubectl -- get pods -A'
?  Done! kubectl is now configured to use "minikube" by default
確認啟動
> minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
檢查一下是否在正確的 cluster 下 (這是保護我們,如已經有其他 k8s cluster 不小心沒換到很悲劇)
> kubectl config current-context
minikube
我們用本文上方的 nginx-deployment.yaml 當作範例,在 MiniKube 上部署一個,含有三個 pods 的 Nginx 服務。
> kubectl create -f nginx-deployment.yaml
deployment.apps/nginx-deployment created
> kubectl get pods
NAME                                READY     STATUS    RESTARTS   AGE
nginx-deployment-66b6c48dd5-hrwg5   1/1       Running   0          48s
nginx-deployment-66b6c48dd5-wlpk5   1/1       Running   0          48s
nginx-deployment-66b6c48dd5-xrgkj   1/1       Running   0          48s
以同一份設定檔,我們試著將 replicas: 3調整成replicas: 2 ,並利用 apply 命令更新 Deployment。
> kubectl apply -f nginx-deployment.yaml
deployment.apps/nginx-deployment unchanged
> kubectl get pods
NAME                                READY     STATUS    RESTARTS   AGE
nginx-deployment-66b6c48dd5-hrwg5   1/1       Running   0          3m27s
nginx-deployment-66b6c48dd5-wlpk5   1/1       Running   0          3m27s
最後我們將利用同一份設定檔,刪除 Deployment。
> kubectl delete -f nginx-deployment.yaml
deployment.apps "nginx-deployment" deleted
> kubectl get pods
No resources found.
以上就是今天我們的部署初體驗,484意外的簡單快速。重點是 MiniKube 真的可幫我們省下不少運行在網路平台的錢,想當初傻傻的直接在 Google 的 GKE 上練習,真的很蠢啊QAQ  。
。